% !Mode:: "TeX:UTF-8"

\section{项目设计与实现}

\subsection{硬件设计}

\subsubsection{系统总体架构}
系统采用模块化设计，以STM32F103C8T6微控制器为核心，通过外围电路实现红外接收、电机驱动、电源管理等关键功能。系统架构如图\ref{fig:sys_arch}所示，包含主控制器模块、红外接收模块、电机驱动模块、电源模块和用户指示模块。

\subsubsection{主控制器模块}
选用STM32F103C8T6微控制器作为主控芯片，主要特性包括：
- 72MHz Cortex-M3内核
- 64KB Flash, 20KB SRAM
- 3个通用定时器（TIM2/TIM3/TIM4）
- 丰富的GPIO接口
- 12位ADC转换器

\subsubsection{红外接收模块}
采用HX1838B红外接收模块，主要特性：
\begin{itemize}
    \item 工作电压：2.7~5.5V
    \item 接收频率：38kHz
    \item 静态电流：0.8~1.5mA
    \item 数字信号输出：3线制接口
    \item 连接方式：\texttt{OUT}引脚 $\rightarrow$ \texttt{PB14}（\texttt{TIM3\_CH1}），通过定时器输入捕获功能解码信号
\end{itemize}

\subsubsection{电机驱动模块}
\paragraph{TB6612电机驱动方案}
采用TB6612驱动芯片驱动6V直流风扇电机：
\begin{itemize}
    \item \texttt{AIN1/AIN2} $\rightarrow$ \texttt{PA4/PA5}
    \item \texttt{PWMA} $\rightarrow$ \texttt{PA2}（\texttt{TIM2\_CH1} PWM输出）
\end{itemize}
通过调节PWM占空比实现四档调速（低：20\%、中：40\%、高：60\%、满：70\%）

\subsubsection{电源模块}
设计双电源供电方案：
- 主控电路：AMS1117-3.3V稳压芯片，输入5V→输出3.3V
- 电机电路：TB6612驱动模块，输入5V→输出5V
- USB接口提供5V调试电源

\subsubsection{用户指示模块}
- OLED屏幕显示档位：Off（关闭）、Low Speed（一档）、Medium Speed（ 二档）、High Speed（三档）、Max Speed（四档）

\subsection{软件设计}

\subsubsection{系统软件架构}
软件采用分层设计：
1. 驱动层：红外解码、PWM输出、定时器配置
2. 应用层：主控制逻辑、状态管理、用户接口

\subsubsection{主程序流程}
系统采用中断驱动+状态机设计：
\begin{enumerate}
    \item 系统初始化（时钟、GPIO、定时器、中断）
    \item 进入主循环，检测系统状态
    \item 红外中断服务程序处理遥控信号
    \item 定时器中断处理PWM输出和定时功能
    \item 更新OLED显示屏信息
\end{enumerate}

\subsubsection{红外解码协议实现}
使用NEC协议解码，关键参数：
- 引导码：9ms高电平+4.5ms低电平
- 数据码：0.56ms高电平+0.56ms/1.69ms低电平
- 32位数据传输（地址码+命令码+反码）

\begin{center}
    \resizebox{0.95\textwidth}{!}{
    \begin{tabular}{|l|l|l|}
      \hline
      \textbf{按键功能} & \textbf{红外编码值} & \textbf{系统响应} \\
      \hline
      风扇关闭 & 16750695 & 关闭风扇 \\
      \hline
      一档风 & 16753245 & 设置风速档位一档 \\
      \hline
      二档风 & 16736925 & 设置风速档位二档 \\
      \hline
      三档风 & 16769565 & 设置风速档位三档 \\
      \hline
      四档风 & 16720605 & 设置风速档位四档 \\
      \hline
    \end{tabular}
    }
  \end{center}

\subsection{代码介绍}

\subsubsection{初始化和配置}
\begin{itemize}
    \item \begin{verbatim}OLED_Init()：初始化OLED屏幕\end{verbatim}
    \item \begin{verbatim}Motor_Init()：初始化PWM\end{verbatim}
    \item \begin{verbatim}IR_Init()：初始化红外遥控\end{verbatim}
    \item \begin{verbatim}Timer_Init()：初始化红外遥控使用的计时器\end{verbatim}
\end{itemize}

\subsubsection{主功能实现}
\begin{itemize}
    \item \begin{verbatim}IR_GetDataFlag()：\end{verbatim}获取红外解码函数，解析NEC协议数据
    \item \begin{verbatim}Motor_SetSpeed(int8_t Speed)：\end{verbatim}风扇控制函数
          \begin{itemize}
              \item \begin{verbatim}PWM_SetCompare3(uint16_t Compare)：\end{verbatim}设置PWM占空比
              \item \begin{verbatim}OLED_ShowString(uint8_t Line, uint8_t Column, char *String)\end{verbatim}更新风速模式
          \end{itemize}
\end{itemize}

\subsubsection{特定条件响应}
\begin{itemize}
    \item \begin{verbatim}HAL_TIM_IC_CaptureCallback()：\end{verbatim}红外信号捕获中断回调函数，实时处理遥控信号
\end{itemize}

\subsubsection{循环体结构}
\begin{itemize}
    \item \begin{verbatim}while (1) {
        if(IR_GetDataFlag()==1)
		{
			
			switch (Data)
			{
				case NUM_0:ModeFlag=0;break;
				case NUM_1:ModeFlag=1;break;
				case NUM_2:ModeFlag=2;break;
				case NUM_3:ModeFlag=3;break;
				case NUM_4:ModeFlag=4;break;

			}
			switch(ModeFlag)
			{
				case 0:OLED_ShowString(2,1,"OFF        ");break;
				case 1:OLED_ShowString(2,1,"Low Speed    ");break;
				case 2:OLED_ShowString(2,1,"Medium Speed");break;
				case 3:OLED_ShowString(2,1,"High Speed    ");break;
				case 4:OLED_ShowString(2,1,"Max Speed      ");break;
			}
			OLED_ShowNum(3,1,ModeFlag,1);
		}
		switch(ModeFlag)
		{
			case 0:Speed=0;break;
			case 1:Speed=20;break;
			case 2:Speed=40;break;
			case 3:Speed=60;break;
			case 4:Speed=70;break;
		}
		Motor_SetSpeed(Speed);
}\end{verbatim}
\end{itemize}

\subsection{技术实现细节}
\subsubsection{PWM调速实现}
使用TIM2产生频率为20kHz的PWM信号，通过改变CCR1寄存器的值调整占空比：
\begin{align*}
\text{占空比} = \frac{\text{CCR1}}{\text{ARR}} \times 100\%
\end{align*}
其中ARR=100，对应档位：CCR1=20(一)/40(二)/60(三)/80(四)

